#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int judge_digit(int num)//计算整数有几位，使用了递归
{
	if (num > 9)
	{
		return 1 + judge_digit(num / 10);
	}
	return 1;
}

int try_cal_nar(int num, int dig)//尝试使用自幂数的计算 - 使用了递归 - 若数字为123， 则返回1^3 + 2^3 + 3^3
{
	int ret = dig;
	if (num > 9)
	{
		int sum = 1;
		while(ret--)
		{
			sum *= num % 10;
		}
		return sum + try_cal_nar(num / 10, dig);
	}
	else
	{
		int sum = 1;
		while(ret--)
		{
			sum *= num;
		}
		return sum;
	}
}

int judge_nar(const int num , int dig)//判断是否为自幂数，是输出1，不是输出0
{
	if (try_cal_nar(num, dig) == num)//判断自幂数算法得出的数字是否等于原数字
	{
		return 1;
	}
	return 0;
}

void test()//找出0-100000之间的自幂数
{
	int n = 0;
	for( n = 0; n <= 100000; n++)
	{
		int dig = judge_digit(n);
		if (1 == judge_nar(n, dig))
		{
			printf("%d\n", n);
		}
	}
}

int main()
{
	test();
	return 0;
}